在 RouterOS 上搭建 IKEv2 VPN
因为有在外时连回家中内网的需求,研究了一下决定使用 IKEv2 来实现;鉴于我没有公网 IP,只能使用 IPv6 来进行连接;研究一番之后成功实现了,特此记录一下。
相关条件
我的路由器型号是RB4011
,经过测试的其他设备包含iPhone
和Windows
平台,其他平台尚未测试,但想来可以通用本文的教程,大家可以自行尝试。
我的设备型号和软件版本如下:Mikrotik RB4011 / RouterOS 7.16.1
,iPhone 15 / iOS 18.1
,Windows 10 22H2
。
配置证书
首先需要在RouterOS
上配置证书,包含一张CA证书
、一张路由器用的服务端证书
、和若干张客户端用的证书
,除了Windows
平台的证书生成参数不一样之外,其他平台的都是一样的。
# 生成CA证书
/certificate/add name=IKEv2-CA common-name=IKEv2-CA days-valid=3650 \
key-usage=digital-signature,key-encipherment,data-encipherment,key-cert-sign,crl-sign,tls-client,tls-server
# 生成路由器服务端证书
# subject-alt-name: 换成指向 RouterOS 路由器的域名
/certificate/add name=IKEv2-Server common-name=IKEv2-Server days-valid=3650 \
key-usage=tls-server,digital-signature subject-alt-name=DNS:go.vhvy.me
# 生成 iOS 使用的证书,除 Windows 之外其他平台也可以使用这条脚本(我猜的
#subject-alt-name: 换成自己的子域名,不解析或者不存在也可以
/certificate/add name=IKEv2-iOS common-name=IKEv2-iOS days-valid=3650 key-usage=tls-client,digital-signature subject-alt-name=DNS:ios.vhvy.me
# 生成 Windows 使用的证书
# 注意 Windows 没有 subject-alt-name 参数
/certificate/add name=IKEv2-Win common-name=IKEv2-Win days-valid=3650 key-usage=tls-client,digital-signatur
生成证书后要用CA证书
对其他证书进行签名并确认。
# 首先对 CA证书签名,然后使用 CA 证书依次对其他证书进行签名
/certificate/sign IKEv2-CA
/certificate/sign ca=IKEv2-CA IKEv2-Server
/certificate/sign ca=IKEv2-CA IKEv2-iOS
/certificate/sign ca=IKEv2-CA IKEv2-Win
# 然后依次进行信任,CA 证书已经默认信任了
/certificate/set trusted=yes IKEv2-Server
/certificate/set trusted=yes IKEv2-iOS
/certificate/set trusted=yes IKEv2-Win
然后导出CA
证书和各个客户端的证书,导出后使用WinBox
下载到本地供后续使用。
# 12345678 是客户端导入时用到的密码,可以自行修改
# 导出后 WinBox / Files 下面应该有一个后缀为 crt 的 CA 证书以及若个干 p12 后缀的客户端证书
/certificate/export-certificate IKEv2-CA
/certificate/export-certificate export-passphrase=12345678 type=pkcs12 IKEv2-iOS
/certificate/export-certificate export-passphrase=12345678 type=pkcs12 IKEv2-Win
配置 IKEv2
虽然搭建的是IKEv2
,但是实际上是在IPSec
模块中进行相关配置的。
# 首先创建分配 IP 的池子,IP范围可以自行修改
# 如果修改了 IP 范围,请自行计算子网掩码,并修改后续步骤中的子网掩码
# 可以用这个工具计算: https://tool.chinaz.com/tools/subnetmask
/ip/pool/add name=IKEv2-Pool ranges=192.168.230.1-192.168.230.14
接下来配置 IPSec
相关,这段是重点,请注意看注释内容。
# address-prefix-length: 如果修改了 IP 范围,请修改此参数为对应的子网掩码
# static-dns: 提供给客户端的 DNS 服务器,可以自行设定
# split-include: 要推送给客户端的路由,默认为 0.0.0.0/0,可以设定多条,用逗号分隔
# 如果没有设置该参数,则客户端将会把所有流量通过 IKEv2 隧道发送到 RouterOS这边
# 如果设定了该参数,则客户端只会将指定的网段通过 IKEv2 隧道发送到 RouterOS这边
# 示例中我就仅将我局域网内的网段推送给了客户端
/ip ipsec mode-config
add address-pool=IKEv2-Pool address-prefix-length=28 name=IKEv2-CFG static-dns=192.168.233.233 \
system-dns=no split-include=192.168.233.0/24,192.168.232.0/24
#---------------这段照抄---------------#
/ip ipsec policy group
add name=IKEv2-Group
/ip ipsec profile
add enc-algorithm=aes-256,aes-128 hash-algorithm=sha256 name=IKEv2-profile1
/ip ipsec peer
add exchange-mode=ike2 name=IKEv2-Peer passive=yes profile=IKEv2-profile1
/ip ipsec proposal
add auth-algorithms=sha256,sha1 enc-algorithms=aes-256-cbc,aes-128-cbc lifetime=1d name=IKEv2-proposal1 pfs-group=none
#-------------------------------------#
# dst-address: 设置为上面 IKEv2-Pool 的网段
/ip ipsec policy
add dst-address=192.168.230.0/28 group=IKEv2-Group proposal=IKEv2-proposal1 src-address=0.0.0.0/0 template=yes
# 这段是用来配置和对端的验证方式的,iOS 和 Windows 客户端略有差别
/ip ipsec identity
# my-id: iOS 对端设置中需要将该参数中的域名设置为生成路由器服务端证书时用到的域名
# 即换成指向 RouterOS 路由器的域名
add auth-method=digital-signature certificate=IKEv2-Server generate-policy=\
port-strict match-by=certificate mode-config=IKEv2-CFG peer=IKEv2-Peer \
policy-template-group=IKEv2-Group remote-certificate=IKEv2-iOS my-id=fqdn:go.vhvy.me
add auth-method=digital-signature certificate=IKEv2-Server generate-policy=\
port-strict match-by=certificate mode-config=IKEv2-CFG peer=IKEv2-Peer \
policy-template-group=IKEv2-Group remote-certificate=IKEv2-Win
IKEv2
会用到500
和4500
的UDP
端口,需要在防火墙中放行,这段按照自己的需求进行修改。
# 如果使用 ipv4,则在 ipv4 的防火墙中进行放行
/ipv6/firewall/filter/add chain=input protocol=udp dst-port=500,4500 action=accept in-interface=pppoe-out1
配置 iOS IKEv2
这一步可以对照着什么值得买上这位朋友的帖子来进行安装:https://post.smzdm.com/p/av7zrgg4/
首先将生成证书那一步生成的后缀为crt
的CA证书
和后缀为p12
的iOS证书
和传输到iPhone
上,保存到文件App
内之后先点击CA证书
进行安装,安装完成后打开设置会提示已下载描述文件,点进去正常安装即可。
接下来对iOS
证书进行一样的操作,不同的是iOS
证书如果设置了密码会要求输入证书密码才能进行安装。
安装完进入系统设置中添加VPN
,类型
选择IKEv2
,描述
自己填即可,服务器
指向 RouterOS 路由器的域名,远程 ID
填写填写生成服务端证书时填写的域名,一般和服务器的域名是一样的,本地 ID
填写生成 iOS 证书时填写的域名。
用户鉴定选择无,勾选上使用证书,证书选择刚才安装的iOS 证书
即可;填写完毕并保存后,就可以进行正常连接啦。
连接之后在WinBox
的IP/IPSec/Active Peers
中可以看到当前已连接的客户端。
这里说句题外话,iOS 填写 IKEv2 的页面有 BUG,填写完成进行二次修改并进行保存之后会出现修改无效的情况,我在这里卡了很久才发现修改没有生效;建议不要修改 IKEv2 相关配置,直接删除新建更好。
配置 Windows IKEv2
参考这位 Youtuber 的视频: https://youtu.be/zrvoPvaX26c?si=BQ08Bnatj9SankbX&t=428